# Darren
# 2025年02月18日14时02分49秒

# 容器基本操作 增 删 改 查
# 列表
name_list = ["zhangsan", "lisi", "wangwu"]

# 查
# 取值，取索引
print(name_list[2])  # 取值
print(name_list.index("lisi"))  # 取索引，lisi第一次出现的次数
# print(name_list.index("hh"))  # ValueError: 'hh' is not in list
# print(name_list[3]) # IndexError: list index out of range

# 改
name_list[1] = 10  # 列表中元素可以是不同数据类型
print(name_list)

# 增加
name_list.append('王小二')  # 表尾追加
print(name_list)
name_list.insert(0, '王小美')  # 指定位置插入,其后元素后移
print(name_list)

# 合并
print(f'合并前id(name_list)={id(name_list)}')
temp_list = ["孙悟空", "猪二哥", "沙师弟"]
name_list.extend(temp_list)  # 将temp_list追加到 name_list表尾
print(f'合并前id(name_list)={id(name_list)}')  # 未改变索引，地址不变
print(name_list)

# 删除
name_list.remove("wangwu")  # 删除指定元素在列表中第一个位置
print(name_list)
name_list.pop()  # 默认删除表尾元素
print(name_list)
name_list.pop(2)  # 删除下标为2的元素
print(name_list)
del name_list[4]  # 删除下标为4的元素
print(name_list)
name_list.clear()  # 清空列表
print(name_list)
# name_list.remove("lele")  # ValueError: list.remove(x): x not in list

name_list = ["张三", "李四", "王五", "王小二", "张三"]

# 数据统计
print(len(name_list))  # 列表长度
print(name_list.count("张三"))  # 统计元素出现个数

# 排序
name_list = ["zhangsan", "lisi", "wangwu", "wangxiaoer"]
num_list = [6, 8, 4, 1, 10]
# 升序
name_list.sort()
num_list.sort()
print(name_list)
print(num_list)
# 降序
num_list.sort(reverse=True)
print(num_list)
# 反转
name_list.reverse()
print(name_list)

# 遍历
for i in name_list:
    print(i, end=" ")
i = 0
while i < len(num_list):
    print(num_list[i], end=" ")
    i += 1
print("\n")

# 列表生成式
num_list = [x for x in range(100)]  # 生成0-99的列表
print(num_list)
print("-" * 50)
# 循环表示
b = []
for x in range(10):
    b.append(x)
print(b)
print("-" * 50)
# 两个for循环 j:内层循环(列表元素)  i:外层循环 外层在内层前面
a = [j for i in range(10) for j in range(i)]
print(a)
print("-" * 50)
# 二维列表  列表元素：row * col  col:内层循环(整体)  row:外层循环
a = [[col * row for col in range(6)] for row in range(5)]
print(a)
print("-" * 50)
# 2维列表转1维列表
a = [j for x in a for j in x]
print(a)
# 条件筛选 只有if
c = [x for x in range(10) if x % 2 == 0]
print(c)
print("-" * 50)
# if-else 的三元表达式
a = [x if x % 2 == 0 else x ** 2 for x in range(10)]  # 不满足表达式，按else后面输出
print(a)
print("-" * 50)

# 列表简写操作
a = [1, 2, 3, 4, 5]
b = [2, 3, 4]
print(id(a))
print(a * 2)  # 重复两遍a构成新元组
print(a + b)  # b追加到a构成新元组
a += b  # 等价于 extend ,和 a=a+b 是不一样的，不改变引用
print(a)
print(id(a))

